<?php
	class RegistrationModel{
		private $m_password;
		private $m_registered = "registered";
		private $m_db = null;
		// Funktion för att lägga till användare i databasen.
		public function DoInsert($reg_username, $reg_password, $reg_email, $reg_bday, $reg_sex){		
			$sql = "INSERT INTO members(username, password, email, birthday, sex) VALUES(?, ?, ?, ?, ?)";			
			$stmt = $this->m_db->prepare($sql);		
			$stmt->bind_param('sssss', $reg_username, $reg_password, $reg_email, $reg_bday, $reg_sex);
			// Finns inte användaren redan så skapas en ny.		
			if($this->m_db->execute($stmt) == 0)
			{
				$_SESSION[$this->m_registered] = true;
				return true;
			}
			return false;
		}
		// Funktion för att kontrollera om inmatat användarnamn redan finns i databasen.
		public function DoMatch($reg_username){			
			$sql = "SELECT username FROM members WHERE username = ?";	
			$stmt = $this->m_db->prepare($sql);			
			$stmt->bind_param('s', $reg_username);
			// Finns användaren redan ska de inte gå att registrera igen.		
			if($this->m_db->execute($stmt) > 0)
			{
				return true;
			}
			return false;		
		}
		// Funktion för att validera användarnamn.
		public function ValidateUsername($reg_username){
			// Kontrollerar om fältet är tomt eller inte.
		 	if($reg_username !== ''){			
				$pattern = '^[a-z0-9_-]{5,20}$^';
				// Returnerar sant om användarnamnet matchar mönstret.
				if(preg_match($pattern, $reg_username)){   
					return true;
				}
			}
			return false;		
		}
		// Funktion för att validera lösenord.
		public function ValidatePassword($reg_password){
			// Kontrollerar om fältet är tomt eller inte.
		 	if($reg_password !== ''){			
				$pattern = '^(?=.*\d).{6,12}$^';
				// Returnerar sant om lösenordet matchar mönstret.
				if(preg_match($pattern, $reg_password)){
					// Skickar lösenordets värde vidare till variabeln som ska användas för bekräftelse.
					$this->m_password = $reg_password;
					return true;
				}
			}
			return false;
		}
		// Funktion för att kontrollera om lösenordet matchar bekräftelsen.
		public function ConfirmPassword($reg_confirm){
			// Returnerar sant om lösenordet matchar bekräftelsen.
			if ($reg_confirm == $this->m_password) {
				return true;
			}
			return false;
		}
		// Funktion för att validera e-post.
		public function ValidateMail($reg_email){
			// Kontrollerar om fältet är tomt eller inte.
		 	if($reg_email !== ''){			
				$pattern = '^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$^';
				// Returnerar sant om e-posten matchar mönstret.
				if(preg_match($pattern, $reg_email)){
					return true;
				}
			}
			return false;
		}
		// Funktion för att validera födelsedag.
		public function ValidateBday($reg_bday){
			// Kontrollerar om fältet är tomt eller inte.
		 	if($reg_bday !== ''){			
				$pattern = '^\b(19\d{2}|20\d{2}|\d{2})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\b$^';
				// Returnerar sant om födelsedagen matchar mönstret.
				if(preg_match($pattern, $reg_bday)){
					return true;
				}
			}
			return false;
		}
		// Funktion för att validera kön.
		public function ValidateSex($reg_sex){
			// Kontrollerar om fältet är tomt eller inte.
		 	if($reg_sex !== ''){			
				return true;
			}
			return false;
		}
		//
		public function IsRegistered(){
		 	if(isset($_SESSION[$this->m_registered])){
				return true;
			}
			else{
				return false;
			}
		}
		//
		public function EndSession(){
			unset($_SESSION[$this->m_registered]);
		}
		// Konstruktor.
		public function __construct(Database $db) {
			$this->m_db = $db;
		}
	}
?>